﻿#define  _CRT_SECURE_NO_WARNINGS 1
//1. 有五个学生，每个学生有3门课的成绩，
// 从键盘输入以上数据（包括学生号，姓名，三门课成绩），
//计算出平均成绩，
// 况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
#include <stdio.h>
// 定义学生结构体
//typedef struct
//{
//	// 学号
//	char id[20];
//	// 姓名
//	char name[20];
//	// 三门课成绩
//	float scores[3];
//	// 平均成绩
//	float average;
//}Student;
//
//int main()
//{
//	Student students[5];
//	FILE* fp;
//	// 输入学生信息
//	for (int i = 0; i < 5; i++)
//	{
//		printf("请输入第 %d 个学生的信息（学号 姓名 成绩1 成绩2 成绩3）：\n", i + 1);
//		scanf("%s %s %f %f %f",
//			students[i].id, students[i].name,
//			&students[i].scores[0],
//			&students[i].scores[1],
//			&students[i].scores[2]);
//		// 计算平均成绩
//		students[i].average = (students[i].scores[0] +
//			students[i].scores[1] +
//			students[i].scores[2]) / 3;
//	}
//	// 打开文件，准写入
//	fp = fopen("stud", "w");
//	if (fp == NULL)
//	{
//		printf("无法打开文件！\n");
//		return 1;
//	}
//	// 把学生信息写入文件
//	for (int i = 0; i < 5; i++)
//	{
//		fprintf(fp, "学号: %s, 姓名: %s, 成绩1: %.2f, 成绩2: %.2f,成绩3: %.2f, 平均成绩: %.2f\n",
//			students[i].id,
//			students[i].name,
//			students[i].scores[0],
//			students[i].scores[1],
//			students[i].scores[2],
//			students[i].average);
//	}
//	// 关闭文件
//	fclose(fp);
//	printf("数据已成功写入文件stud!\n");
//	return 0;
//}




//2. A、B、C、D、E 五人在某天夜里合伙去捕鱼，
// 到第二天凌晨时都疲惫不堪，于是各自找地方睡觉。
//日上三杆，A 第一个醒来，他将鱼分为五份，
// 把多余的一条鱼扔掉，拿走自己的一份。
//B 第二个醒来，也将鱼分为五份，
// 把多余的一条鱼扔掉拿走自己的一份。 。
//C、D、E 依次醒来，也按同样的方法拿鱼。
//问他们合伙至少捕了多少条鱼 ? 
// 以及每个人醒来时见到了多少鱼？


//int main() 
//{
//    int total = 1;  // 从1开始尝试鱼的总数
//    int found = 0;   // 标记是否找到解 
//
//    while (!found) {
//        int fish = total;  // 当前鱼的总数
//        int valid = 1;     // 标记当前总数是否有效 
//
//        // 模拟五次分鱼过程（A、B、C、D、E各一次）
//        for (int i = 0; i < 5; i++) {
//            // 检查当前鱼数减1后是否能被5整除 
//            if ((fish - 1) % 5 != 0) {
//                valid = 0;  // 不满足条件，跳出循环
//                break;
//            }
//            // 计算分鱼后剩下的鱼（扔掉一条，分成五份，拿走一份，剩下四份）
//            fish = (fish - 1) / 5 * 4;
//        }
//
//        // 如果五次分鱼都满足条件且最后一次分鱼后鱼数非负
//        if (valid && fish >= 0) {
//            printf("总鱼数至少为：%d\n", total);
//
//            // 重新模拟分鱼过程以记录每个人见到的鱼数 
//            fish = total;
//            printf("A 见到鱼数：%d\n", fish);
//
//            // 依次计算B、C、D、E见到的鱼数
//            for (int i = 0; i < 4; i++) {
//                fish = (fish - 1) / 5 * 4;
//                if (i == 0) printf("B 见到鱼数：%d\n", fish);
//                else if (i == 1) printf("C 见到鱼数：%d\n", fish);
//                else if (i == 2) printf("D 见到鱼数：%d\n", fish);
//                else if (i == 3) printf("E 见到鱼数：%d\n", fish);
//            }
//
//            found = 1;  // 找到解，退出循环 
//        }
//        total++;  // 尝试下一个总数 
//    }
//
//    return 0;
//}




//3. 猴子吃桃问题：猴子第一天摘下若干个桃子，
// 当即吃了一半，还不瘾，又多吃了一个 
//第二天早上又将剩下的桃子吃掉一半，又多吃了一个。
// 以后每天早上都吃了前一天剩下 的一半零一个。
//到第10天早上想再吃时，见只剩下一个桃子了。
// 求第一天共摘了多少。
//int main()
//{
//	// 第十天的数量
//	int remaining = 1;
//	for (int i = 9; i >= 1; i--)
//	{
//		// 前一天的桃子数量是（当天数量+1）*2
//		remaining = (remaining + 1) * 2;
//	}
//	printf("第一天共摘了%d 个桃子\n", remaining);
//	return 0;
//}